obj.mouse <- ClusterSCT(obj.mouse, c(1))
obj.m.mouse <- ClusterSCT(obj.m.mouse, c(1))
obj.opossum <- ClusterSCT(obj.opossum, c(1))
obj.m.opossum <- ClusterSCT(obj.m.opossum, c(1))
obj.mouse <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_mouse.rds")
Loading required package: SeuratObject
Loading required package: sp
obj.opossum <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_opossum.rds")
objs.i.mouse <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_i_mouse.rds")
objs.i.opossum <- readRDS("E:/Transcriptomics_V1/Integration/Opossum_Mouse-P38/obj_i_opossum.rds")
DimPlot(obj.mouse, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.mouse, reduction = "umap", group.by = "subclass", label = TRUE, repel = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.mouse, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
obj.mouse$subclass.IT <- obj.mouse$subclass
obj.mouse$subclass.IT[obj.mouse$subclass %in% c("L2/3", "L4", "L5IT", "L6IT")] <- "IT"
p <- DimPlot(obj.mouse, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.mouse, reduction = "umap", group.by = "subclass.IT", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_SubclassIT_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_SubclassIT_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image

DimPlot(obj.m.mouse, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.mouse, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.mouse, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.mouse, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
p <- DimPlot(obj.m.mouse, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_IntSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_Subclass_IntSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.m.mouse, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_PredictedSubclass_IntSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Mouse-P38_V1_All_UMAP_PredictedSubclass_IntSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image

DimPlot(obj.opossum, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.opossum, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
obj.opossum$subclass.IT <- obj.opossum$subclass
obj.opossum$subclass.IT[obj.opossum$subclass %in% c("IT_A", "IT_B", "IT_C", "IT_D", "IT_E")] <- "IT"
p <- DimPlot(obj.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_Subclass_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_Subclass_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.opossum, reduction = "umap", group.by = "subclass.IT", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_SubclassIT_FullSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_SubclassIT_FullSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image

DimPlot(obj.m.opossum, reduction = "umap", group.by = "sample", label = FALSE, raster = FALSE, shuffle = TRUE) + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.opossum, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()

DimPlot(obj.m.opossum, reduction = "umap", group.by = "type", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
p <- DimPlot(obj.m.opossum, reduction = "umap", group.by = "subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_Subclass_IntSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_Subclass_IntSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
p <- DimPlot(obj.m.opossum, reduction = "umap", group.by = "predicted.subclass", label = TRUE, raster = FALSE, shuffle = TRUE) + NoLegend() + xlim(-18, 18) + ylim(-18, 18) + coord_equal()
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_PredictedSubclass_IntSpace.svg", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image
ggsave("E:/Opossum_Paper/Figure 1/Opossum_V1_All_UMAP_PredictedSubclass_IntSpace.png", plot = p, dpi = 300)
Saving 7.29 x 4.51 in image

PlotMapping(list(objs.m.mouse[[1]], objs.m.opossum[[1]]), ident.order = c("IT", "L2/3", "L4", "L5IT", "L6IT", "L5NP", "L5PT", "L6CT", "L6b"))
































PlotMapping(list(objs.m.mouse[[2]], objs.m.opossum[[2]]), ident.order = c("Pvalb", "Sst", "Vip", "Lamp5", "Frem1", "Stac", "Meis2"))
































PlotMapping(list(objs.m.mouse[[3]], objs.m.opossum[[3]]), ident.order = c("Astro", "Micro", "OD", "OPC", "Endo", "VLMC"))
































Idents(objs.m.opossum[[1]]) <- "subclass"
levels(objs.m.opossum[[1]]) <- c("IT_A", "IT_B", "IT_C", "IT_D", "IT_E", "L5NP", "L5PT", "L6CT", "L6b")
VlnPlot(objs.m.opossum[[1]], "predicted.subclass.score") + NoLegend()

Idents(objs.m.opossum[[2]]) <- "subclass"
levels(objs.m.opossum[[2]]) <- c("Pvalb", "Sst", "Vip", "Lamp5", "Frem1", "Meis2")
VlnPlot(objs.m.opossum[[2]], "predicted.subclass.score") + theme(legend.spacing.x = unit(2.0, 'cm'))

Idents(objs.m.opossum[[3]]) <- "subclass"
levels(objs.m.opossum[[3]]) <- c("Astro", "Micro", "OD", "OPC", "Endo", "VLMC")
VlnPlot(objs.m.opossum[[3]], "predicted.subclass.score") + theme(legend.spacing.x = unit(2.0, 'cm'))

Idents(obj.m.opossum) <- "subclass"
levels(obj.m.opossum) <- c("IT_A", "IT_B", "IT_C", "IT_D", "IT_E", "L5NP", "L5PT", "L6CT", "L6b",
"Pvalb", "Sst", "Vip", "Lamp5", "Frem1", "Meis2",
"Astro", "Micro", "OD", "OPC", "Endo", "VLMC")
VlnPlot(obj.m.opossum, "predicted.subclass.score") + NoLegend()

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCmBgYHtyfQ0KDQpsaWJyYXJ5KFNldXJhdCkNCmxpYnJhcnkoU2V1cmF0RGlzaykNCmxpYnJhcnkocmV0aWN1bGF0ZSkNCmxpYnJhcnkoc2NydWJsZXRSKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KbGlicmFyeShjbHVzdHJlZSkNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShncmlkRXh0cmEpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHBseXIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3Rvb2xzL3NldXJhdF9mdW5jdGlvbnMuUiIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3Rvb2xzL3NldXJhdF9pbnRlZ3JhdGlvbl9mdW5jdGlvbnMuUiIpDQpzb3VyY2UoIkM6L1J5YW4vR2l0SHViL3RyYWNodGVuYmVyZy1sYWIvdHJhbnNjcmlwdG9taWNzL3hnYm9vc3QveGdib29zdF90cmFpbi5SIikNCnNvdXJjZSgiQzovUnlhbi9HaXRIdWIvdHJhY2h0ZW5iZXJnLWxhYi90cmFuc2NyaXB0b21pY3MveGdib29zdC9wbG90dGluZ0Z4bnMuUiIpDQoNCmNsYXNzZXMgPC0gYygiR2x1dGFtYXRlcmdpYyIsICJHQUJBZXJnaWMiLCAiTm9ubmV1cm9uYWwiKQ0Kb2Jqcy5tb3VzZSA8LSBjKCkNCm9ianMub3Bvc3N1bSA8LSBjKCkNCm9ianMuaS5tb3VzZSA8LSBjKCkNCm9ianMuaS5vcG9zc3VtIDwtIGMoKQ0Kb2Jqcy5tLm1vdXNlIDwtIGMoKQ0Kb2Jqcy5tLm9wb3NzdW0gPC0gYygpDQoNCmZvciAoY2wgaW4gYygyLCAzKSkgeyAjIDEsIGNsYXNzZXMNCg0KICAjIG9iai5vcG9zc3VtIDwtIHJlYWRSRFMocGFzdGUwKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvT3Bvc3N1bS9zZXVyYXQvb3Bvc3N1bV92MV8iLCB0b2xvd2VyKGNsKSwgIl9wcm9jZXNzZWQucmRzIikpDQogICMgb2JqLm9wb3NzdW0kc3BlY2llcyA8LSAiT3Bvc3N1bSINCiAgIyBvYmoubW91c2UuUDM4IDwtIHJlYWRSRFMocGFzdGUwKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvTW91c2Uvc2V1cmF0L21vdXNlX3YxX1AzOF8iLCB0b2xvd2VyKGNsKSwgIl9wcm9jZXNzZWQucmRzIikpDQogICMgb2JqLm1vdXNlLlAzOCRzcGVjaWVzIDwtICJNb3VzZSINCg0KICAjIG9ianMgPC0gbGlzdChvYmoub3Bvc3N1bSwgb2JqLm1vdXNlLlAzOCkNCiAgIyBvYmouaW50ZWdyYXRlZCA8LSBJbnRlZ3JhdGVPYmplY3RzKG9ianNbWzFdXSwgb2Jqc1tbMl1dLCByZXNvbHV0aW9ucyA9IGMoMSwgMiksIG5mZWF0dXJlcyA9IDMwMDAsIHN1YnNhbXBsZSA9IFRSVUUpDQogICMgb2Jqcy5pIDwtIFNwbGl0T2JqZWN0KG9iai5pbnRlZ3JhdGVkLCBzcGxpdC5ieSA9ICJzcGVjaWVzIikNCiAgb2Jqcy5tIDwtIE1hcE9iamVjdHMob2Jqcy5pLm1vdXNlW1tjbF1dLCBvYmpzLmkub3Bvc3N1bVtbY2xdXSwgYygic3ViY2xhc3MiLCAidHlwZSIpLCBhc3NheSA9ICJpbnRlZ3JhdGVkIikNCiAgIyBvYmpzLm1vdXNlIDwtIGFwcGVuZChvYmpzLm1vdXNlLCBvYmpzW1syXV0pDQogICMgb2Jqcy5vcG9zc3VtIDwtIGFwcGVuZChvYmpzLm9wb3NzdW0sIG9ianNbWzFdXSkNCiAgIyBvYmpzLmkubW91c2UgPC0gYXBwZW5kKG9ianMuaS5tb3VzZSwgb2Jqcy5pW1siTW91c2UiXV0pDQogICMgb2Jqcy5pLm9wb3NzdW0gPC0gYXBwZW5kKG9ianMuaS5vcG9zc3VtLCBvYmpzLmlbWyJPcG9zc3VtIl1dKQ0KICBvYmpzLm0ubW91c2UgPC0gYXBwZW5kKG9ianMubS5tb3VzZSwgb2Jqcy5tW1syXV0pDQogIG9ianMubS5vcG9zc3VtIDwtIGFwcGVuZChvYmpzLm0ub3Bvc3N1bSwgb2Jqcy5tW1sxXV0pDQogIA0KfQ0KDQojIG9iai5tb3VzZSA8LSBtZXJnZShvYmpzLm1vdXNlW1sxXV0sIHkgPSBjKG9ianMubW91c2VbWzJdXSwgb2Jqcy5tb3VzZVtbM11dKSkNCiMgb2JqLm9wb3NzdW0gPC0gbWVyZ2Uob2Jqcy5vcG9zc3VtW1sxXV0sIHkgPSBjKG9ianMub3Bvc3N1bVtbMl1dLCBvYmpzLm9wb3NzdW1bWzNdXSkpDQpvYmoubS5tb3VzZSA8LSBtZXJnZShvYmpzLm0ubW91c2VbWzFdXSwgeSA9IGMob2Jqcy5tLm1vdXNlW1syXV0sIG9ianMubS5tb3VzZVtbM11dKSkNCm9iai5tLm9wb3NzdW0gPC0gbWVyZ2Uob2Jqcy5tLm9wb3NzdW1bWzFdXSwgeSA9IGMob2Jqcy5tLm9wb3NzdW1bWzJdXSwgb2Jqcy5tLm9wb3NzdW1bWzNdXSkpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpvYmoubW91c2UgPC0gQ2x1c3RlclNDVChvYmoubW91c2UsIGMoMSkpDQpvYmoubS5tb3VzZSA8LSBDbHVzdGVyU0NUKG9iai5tLm1vdXNlLCBjKDEpKQ0Kb2JqLm9wb3NzdW0gPC0gQ2x1c3RlclNDVChvYmoub3Bvc3N1bSwgYygxKSkNCm9iai5tLm9wb3NzdW0gPC0gQ2x1c3RlclNDVChvYmoubS5vcG9zc3VtLCBjKDEpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0Kb2JqLm1vdXNlIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfbW91c2UucmRzIikNCm9iai5vcG9zc3VtIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfb3Bvc3N1bS5yZHMiKQ0Kb2Jqcy5pLm1vdXNlIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfaV9tb3VzZS5yZHMiKQ0Kb2Jqcy5pLm9wb3NzdW0gPC0gcmVhZFJEUygiRTovVHJhbnNjcmlwdG9taWNzX1YxL0ludGVncmF0aW9uL09wb3NzdW1fTW91c2UtUDM4L29ial9pX29wb3NzdW0ucmRzIikNCm9ianMubS5tb3VzZSA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2Jqc19tX21vdXNlLnJkcyIpDQpvYmpzLm0ub3Bvc3N1bSA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2Jqc19tX29wb3NzdW0ucmRzIikNCm9iai5tLm1vdXNlIDwtIHJlYWRSRFMoIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfbV9tb3VzZS5yZHMiKQ0Kb2JqLm0ub3Bvc3N1bSA8LSByZWFkUkRTKCJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2JqX21fb3Bvc3N1bS5yZHMiKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgbGFiZWwgPSBGQUxTRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpEaW1QbG90KG9iai5tb3VzZSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJ0eXBlIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KDQpvYmoubW91c2Ukc3ViY2xhc3MuSVQgPC0gb2JqLm1vdXNlJHN1YmNsYXNzDQpvYmoubW91c2Ukc3ViY2xhc3MuSVRbb2JqLm1vdXNlJHN1YmNsYXNzICVpbiUgYygiTDIvMyIsICJMNCIsICJMNUlUIiwgIkw2SVQiKV0gPC0gICJJVCINCnAgPC0gRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvTW91c2UtUDM4X1YxX0FsbF9VTUFQX1N1YmNsYXNzX0Z1bGxTcGFjZS5wbmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL01vdXNlLVAzOF9WMV9BbGxfVU1BUF9TdWJjbGFzc19GdWxsU3BhY2Uuc3ZnIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCnAgPC0gRGltUGxvdChvYmoubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MuSVQiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvTW91c2UtUDM4X1YxX0FsbF9VTUFQX1N1YmNsYXNzSVRfRnVsbFNwYWNlLnBuZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvTW91c2UtUDM4X1YxX0FsbF9VTUFQX1N1YmNsYXNzSVRfRnVsbFNwYWNlLnN2ZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInNhbXBsZSIsIGxhYmVsID0gRkFMU0UsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm0ubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5zdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm0ubW91c2UsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAidHlwZSIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCg0KcCA8LSBEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInN1YmNsYXNzIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL01vdXNlLVAzOF9WMV9BbGxfVU1BUF9TdWJjbGFzc19JbnRTcGFjZS5zdmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL01vdXNlLVAzOF9WMV9BbGxfVU1BUF9TdWJjbGFzc19JbnRTcGFjZS5wbmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KcCA8LSBEaW1QbG90KG9iai5tLm1vdXNlLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5zdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9Nb3VzZS1QMzhfVjFfQWxsX1VNQVBfUHJlZGljdGVkU3ViY2xhc3NfSW50U3BhY2Uuc3ZnIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9Nb3VzZS1QMzhfVjFfQWxsX1VNQVBfUHJlZGljdGVkU3ViY2xhc3NfSW50U3BhY2UucG5nIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCkRpbVBsb3Qob2JqLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgbGFiZWwgPSBGQUxTRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoub3Bvc3N1bSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJzdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAidHlwZSIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCg0Kb2JqLm9wb3NzdW0kc3ViY2xhc3MuSVQgPC0gb2JqLm9wb3NzdW0kc3ViY2xhc3MNCm9iai5vcG9zc3VtJHN1YmNsYXNzLklUW29iai5vcG9zc3VtJHN1YmNsYXNzICVpbiUgYygiSVRfQSIsICJJVF9CIiwgIklUX0MiLCAiSVRfRCIsICJJVF9FIildIDwtICAiSVQiDQpwIDwtIERpbVBsb3Qob2JqLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic3ViY2xhc3MiLCBsYWJlbCA9IFRSVUUsIHJhc3RlciA9IEZBTFNFLCBzaHVmZmxlID0gVFJVRSkgKyBOb0xlZ2VuZCgpICsgeGxpbSgtMTgsIDE4KSArIHlsaW0oLTE4LCAxOCkgKyBjb29yZF9lcXVhbCgpDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvT3Bvc3N1bV9WMV9BbGxfVU1BUF9TdWJjbGFzc19GdWxsU3BhY2UucG5nIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1N1YmNsYXNzX0Z1bGxTcGFjZS5zdmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KcCA8LSBEaW1QbG90KG9iai5vcG9zc3VtLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInN1YmNsYXNzLklUIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL09wb3NzdW1fVjFfQWxsX1VNQVBfU3ViY2xhc3NJVF9GdWxsU3BhY2UucG5nIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1N1YmNsYXNzSVRfRnVsbFNwYWNlLnN2ZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpEaW1QbG90KG9iai5tLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAic2FtcGxlIiwgbGFiZWwgPSBGQUxTRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoubS5vcG9zc3VtLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInN1YmNsYXNzIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KRGltUGxvdChvYmoubS5vcG9zc3VtLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gInByZWRpY3RlZC5zdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCkRpbVBsb3Qob2JqLm0ub3Bvc3N1bSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJ0eXBlIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KDQpwIDwtIERpbVBsb3Qob2JqLm0ub3Bvc3N1bSwgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJzdWJjbGFzcyIsIGxhYmVsID0gVFJVRSwgcmFzdGVyID0gRkFMU0UsIHNodWZmbGUgPSBUUlVFKSArIE5vTGVnZW5kKCkgKyB4bGltKC0xOCwgMTgpICsgeWxpbSgtMTgsIDE4KSArIGNvb3JkX2VxdWFsKCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1N1YmNsYXNzX0ludFNwYWNlLnN2ZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQpnZ3NhdmUoIkU6L09wb3NzdW1fUGFwZXIvRmlndXJlIDEvT3Bvc3N1bV9WMV9BbGxfVU1BUF9TdWJjbGFzc19JbnRTcGFjZS5wbmciLCBwbG90ID0gcCwgZHBpID0gMzAwKQ0KcCA8LSBEaW1QbG90KG9iai5tLm9wb3NzdW0sIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAicHJlZGljdGVkLnN1YmNsYXNzIiwgbGFiZWwgPSBUUlVFLCByYXN0ZXIgPSBGQUxTRSwgc2h1ZmZsZSA9IFRSVUUpICsgTm9MZWdlbmQoKSArIHhsaW0oLTE4LCAxOCkgKyB5bGltKC0xOCwgMTgpICsgY29vcmRfZXF1YWwoKQ0KZ2dzYXZlKCJFOi9PcG9zc3VtX1BhcGVyL0ZpZ3VyZSAxL09wb3NzdW1fVjFfQWxsX1VNQVBfUHJlZGljdGVkU3ViY2xhc3NfSW50U3BhY2Uuc3ZnIiwgcGxvdCA9IHAsIGRwaSA9IDMwMCkNCmdnc2F2ZSgiRTovT3Bvc3N1bV9QYXBlci9GaWd1cmUgMS9PcG9zc3VtX1YxX0FsbF9VTUFQX1ByZWRpY3RlZFN1YmNsYXNzX0ludFNwYWNlLnBuZyIsIHBsb3QgPSBwLCBkcGkgPSAzMDApDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpQbG90TWFwcGluZyhsaXN0KG9ianMubS5tb3VzZVtbMV1dLCBvYmpzLm0ub3Bvc3N1bVtbMV1dKSwgaWRlbnQub3JkZXIgPSBjKCJJVCIsICJMMi8zIiwgIkw0IiwgIkw1SVQiLCAiTDZJVCIsICJMNU5QIiwgIkw1UFQiLCAiTDZDVCIsICJMNmIiKSkNCg0KYGBgDQoNCg0KYGBge3J9DQoNClBsb3RNYXBwaW5nKGxpc3Qob2Jqcy5tLm1vdXNlW1syXV0sIG9ianMubS5vcG9zc3VtW1syXV0pLCBpZGVudC5vcmRlciA9IGMoIlB2YWxiIiwgIlNzdCIsICJWaXAiLCAiTGFtcDUiLCAiRnJlbTEiLCAiU3RhYyIsICJNZWlzMiIpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KUGxvdE1hcHBpbmcobGlzdChvYmpzLm0ubW91c2VbWzNdXSwgb2Jqcy5tLm9wb3NzdW1bWzNdXSksIGlkZW50Lm9yZGVyID0gYygiQXN0cm8iLCAiTWljcm8iLCAiT0QiLCAiT1BDIiwgIkVuZG8iLCAiVkxNQyIpKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KSWRlbnRzKG9ianMubS5vcG9zc3VtW1sxXV0pIDwtICJzdWJjbGFzcyINCmxldmVscyhvYmpzLm0ub3Bvc3N1bVtbMV1dKSA8LSBjKCJJVF9BIiwgIklUX0IiLCAiSVRfQyIsICJJVF9EIiwgIklUX0UiLCAiTDVOUCIsICJMNVBUIiwgIkw2Q1QiLCAiTDZiIikNClZsblBsb3Qob2Jqcy5tLm9wb3NzdW1bWzFdXSwgInByZWRpY3RlZC5zdWJjbGFzcy5zY29yZSIpICsgTm9MZWdlbmQoKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0KSWRlbnRzKG9ianMubS5vcG9zc3VtW1syXV0pIDwtICJzdWJjbGFzcyINCmxldmVscyhvYmpzLm0ub3Bvc3N1bVtbMl1dKSA8LSBjKCJQdmFsYiIsICJTc3QiLCAiVmlwIiwgIkxhbXA1IiwgIkZyZW0xIiwgIk1laXMyIikNClZsblBsb3Qob2Jqcy5tLm9wb3NzdW1bWzJdXSwgInByZWRpY3RlZC5zdWJjbGFzcy5zY29yZSIpICsgdGhlbWUobGVnZW5kLnNwYWNpbmcueCA9IHVuaXQoMi4wLCAnY20nKSkNCg0KYGBgDQoNCg0KYGBge3J9DQoNCklkZW50cyhvYmpzLm0ub3Bvc3N1bVtbM11dKSA8LSAic3ViY2xhc3MiDQpsZXZlbHMob2Jqcy5tLm9wb3NzdW1bWzNdXSkgPC0gYygiQXN0cm8iLCAiTWljcm8iLCAiT0QiLCAiT1BDIiwgIkVuZG8iLCAiVkxNQyIpDQpWbG5QbG90KG9ianMubS5vcG9zc3VtW1szXV0sICJwcmVkaWN0ZWQuc3ViY2xhc3Muc2NvcmUiKSArIHRoZW1lKGxlZ2VuZC5zcGFjaW5nLnggPSB1bml0KDIuMCwgJ2NtJykpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQpJZGVudHMob2JqLm0ub3Bvc3N1bSkgPC0gInN1YmNsYXNzIg0KbGV2ZWxzKG9iai5tLm9wb3NzdW0pIDwtIGMoIklUX0EiLCAiSVRfQiIsICJJVF9DIiwgIklUX0QiLCAiSVRfRSIsICJMNU5QIiwgIkw1UFQiLCAiTDZDVCIsICJMNmIiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHZhbGIiLCAiU3N0IiwgIlZpcCIsICJMYW1wNSIsICJGcmVtMSIsICJNZWlzMiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3RybyIsICJNaWNybyIsICJPRCIsICJPUEMiLCAiRW5kbyIsICJWTE1DIikNClZsblBsb3Qob2JqLm0ub3Bvc3N1bSwgInByZWRpY3RlZC5zdWJjbGFzcy5zY29yZSIpICsgTm9MZWdlbmQoKQ0KDQpgYGANCg0KDQpgYGB7cn0NCg0Kc2F2ZVJEUyhvYmoubW91c2UsICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2JqX21vdXNlLnJkcyIpDQpzYXZlUkRTKG9iai5vcG9zc3VtLCAiRTovVHJhbnNjcmlwdG9taWNzX1YxL0ludGVncmF0aW9uL09wb3NzdW1fTW91c2UtUDM4L29ial9vcG9zc3VtLnJkcyIpDQpzYXZlUkRTKG9ianMuaS5tb3VzZSwgIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfaV9tb3VzZS5yZHMiKQ0Kc2F2ZVJEUyhvYmpzLmkub3Bvc3N1bSwgIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfaV9vcG9zc3VtLnJkcyIpDQpzYXZlUkRTKG9ianMubS5tb3VzZSwgIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpzX21fbW91c2UucmRzIikNCnNhdmVSRFMob2Jqcy5tLm9wb3NzdW0sICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2Jqc19tX29wb3NzdW0ucmRzIikNCnNhdmVSRFMob2JqLm0ubW91c2UsICJFOi9UcmFuc2NyaXB0b21pY3NfVjEvSW50ZWdyYXRpb24vT3Bvc3N1bV9Nb3VzZS1QMzgvb2JqX21fbW91c2UucmRzIikNCnNhdmVSRFMob2JqLm0ub3Bvc3N1bSwgIkU6L1RyYW5zY3JpcHRvbWljc19WMS9JbnRlZ3JhdGlvbi9PcG9zc3VtX01vdXNlLVAzOC9vYmpfbV9vcG9zc3VtLnJkcyIpDQoNCmBgYA0KDQo=